package com.star.common.core.contract;

import com.star.common.core.utils.BizAssert;

import java.io.Serializable;

/**
 * 统一接口响应，标准的响应数据结构
 *
 * @author zhouhengzhe
 */
public interface IR extends Serializable {
    /**
     * 获取code码
     *
     * @return code
     */
    Serializable getCode();

    /**
     * 获取信息
     *
     * @return 信息
     */
    String getMsg();

    /**
     * 获取数据
     *
     * @param <T> 数据类型
     * @return 数据
     */
    <T> T getData();

    /**
     * 是否请求成功/失败
     *
     * @return true/false
     */
    boolean isOk();


    /**
     * 成功或者失败
     *
     * @param errorMsg 错误码
     */
    default void isOk(String errorMsg) {
        BizAssert.isTrueWarn(isOk(), errorMsg + " -> {}", this);
    }

    /**
     * 错误的数据
     *
     * @param errorMsg
     * @param <T>
     * @return
     */
    default <T> T getData(String errorMsg) {
        BizAssert.isTrueWarn(isOk(), errorMsg + " -> {}", this);
        T data = getData();
        BizAssert.notNullWarn(data, errorMsg + " -> {}", this);
        return data;
    }

}